UOS/深度系统安装鸿蒙OS北向应用开发IDE工具 DevEco Studio 2 Beta 3 您所在的位置:网站首页 鸿蒙os ide UOS/深度系统安装鸿蒙OS北向应用开发IDE工具 DevEco Studio 2 Beta 3

UOS/深度系统安装鸿蒙OS北向应用开发IDE工具 DevEco Studio 2 Beta 3

2023-09-10 07:19| 来源: 网络整理| 查看: 265

求人不如求己,现在分享下我自己在Linux系统上安装鸿蒙OS北向应用开发IDE工具 DevEco Studio 2 Beta 3的经验:

 

预先安装好构建WINE的编译环境:

sudo apt build-dep wine

 

下载wine源码

源码下载地址:

https://dl.winehq.org/wine/source/

当前最新版本是6.0,wine-6.0.tar.xz

 

//////////////////////

解压后进入到wine6.0的源码根目录创建两个子目录用来存放后面构建出来的程序文件:

mkdir -p wine32 wine64

编译安装64位及32位wine

cd wine64

../configure --enable-win64

make -j 4

sudo make install

---------------

cd ../wine32

../configure --with-wine64=../wine64

make -j 4

sudo make install

///////////////////

 

设置wine的目录和硬件

rm -rf ~/.wine

WINEPREFIX=~/.wine wine64 wineboot

winecfg

启动wine配置程序设置Windows版本为win10

///////////////////

安装中文字体

 

链接: https://pan.baidu.com/s/1SWTe1Dj485FTJSdKqI6QCA

密码: 4abj

下载后解压出所有字体文件,剪切到wine的c盘Windows/fonts目录内

 

/////////////

安装wine-mono和wine-gecko

http://mirrors.ustc.edu.cn/wine/wine/wine-mono/5.1.1/wine-mono-5.1.1-x86.msi

http://mirrors.ustc.edu.cn/wine/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86_64.msi

http://mirrors.ustc.edu.cn/wine/wine/wine-gecko/2.47.2/wine-gecko-2.47.2-x86.msi

 

wine msiexec /i wine-mono-5.1.1-x86.msi

wine msiexec /i wine-gecko-2.47.2-x86_64.msi

wine msiexec /i wine-gecko-2.47.2-x86.msi

 

/////////////////////

到鸿蒙OS官网下载北向IDE

https://developer.harmonyos.com/cn/develop/deveco-studio#download

devecostudio-windows-tool-2.0.12.201

 

因为这IDE安装程序是32位,所以以下目的是从win32安装包里拿到win64的ide程序,

还有个办法就是直接从装好的Windows机器里复制出ide的目录到深度系统。

安装deepin-wine5,深度的仓库里这个版本是wine32,深度v20.1目前linux-libc-dev:i386 和 linux-libc-dev:amd64无法同时存在,此种情况不知是个别还是都是这样的问题,所以我上面编译的wine32部分有些库没加全进去,如果你能顺利用上面编译的wine32启动DevEcoStudio的安装程序则不再需要再装deepin-wine5

sudo apt install deepin-wine5

 

然后打开应用商店安装【迅雷极速版】(wine),

这是为了借用deepin-wine5和迅雷极速版的环境启动deveco studio的安装程序,

deveco-studio-2.0.12.201.exe这个安装程序是Nullsoft Installer 生成的自解压win32 GUI文档,

我在之前编译的wine64不能直接引导安装。

 

既然北向IDE下载页面已经明确需要win64环境就请直接提供win64的安装包好吧,

一个win32安装程序包着win64程序有意思么..

 

装好deepin-wine5后在解压出鸿蒙ide安装包程序的同级目录创建一个ins.sh:

--------------------

#!/bin/bash

wine=deepin-wine5

prefix_dir=${HOME}/.deepinwine/Deepin-ThunderSpeed

WINEPREFIX=${prefix_dir} ${wine} ./deveco-studio-2.0.12.201.exe

exit 0

--------------------

chmod +x ins.sh

双击ins.sh,选运行进入安装鸿蒙OS北向IDE

 

临时安装路径:deepin-wine5的c盘/Program/Huawei/DevEcoStudio,记得所有涉及路径的地方绝对不能有空格也不要有中文。

安装好北向ide后进入~/.deepin-wine的c盘,直接剪切移动Program目录到wine64的c盘,即是:

~/.wine/drive_c/Program/Huawei/DevEcoStudio/,这是IDE最终安装位置。

/////////////////////

下载Nodejs Lts

https://nodejs.org/dist/v14.15.4/node-v14.15.4-win-x64.zip

解压重命名到wine64的~/.wine/drive_c/Program/Huawei/nodejs

 

然后在wine64的~/.wine/drive_c/创建reg.sh:

---------------------

#!/bin/bash

wine regedit

exit 0

---------------------

chmod +x reg.sh

双击reg.sh,选运行进入注册表找到

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 位置,

双击Path键名,修改键值,在最后位置添加

C:\Program\Huawei\nodejs;c:\Program\Huawei\DevEcoStudio\bin;%JAVA_HOME%\bin;%JAVA_HOME%\bin\jre\bin;c:\Program\Huawei\SDK\toolchains

 

键classpath值:

.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar

 

键JAVA_HOME值:

c:\Program\Huawei\DevEcoStudio\jbr

-------------

然后在cmd命令行里设置npm仓库地址

C:\>npm config set registry https://mirrors.huaweicloud.com/repository/npm/

 

cd ~/.wine/drive_c/Program/Huawei/nodejs

mkdir -p node_global node_cache

 

在wine cmd或等后面ide能正常启动后再在ide的Terminal窗口里设置以下两项

设置 npm 全局包下载路径:

npm config set prefix "c:\Program\Huawei\nodejs\node_global"

 

在wine cmd设置 npm 缓存路径:

npm config set cache "c:\Program\Huawei\nodejs\node_cache"

 

验证nodejs

npm info express

 

/////////////////////////////

进入wine64的~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin

创建devecostudio.sh

---------------------

#!/bin/bash

wine=wine

prefix_dir=${HOME}/.wine

WINEPREFIX=${prefix_dir} ${wine} ${HOME}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio64.exe

exit 0

---------------------

chmod +x devecostudio.sh

/////////////////////////////

然后回到桌面右键选【在终端中打开】,在终端里用vim在桌面创建hos-ide.desktop快捷图标配置文件:

---------------------

[Desktop Entry]

Name=HOS IDE

Type=Application

Exec=bash /home/${USER}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio.sh

Terminal=false

StartupNotify=true

Icon=/home/${USER}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio.svg

X-Deepin-CreatedBy=com.deepin.dde.daemon.Launcher

X-Deepin-AppID=DevEcoStudio

Categories=System;

Comment=DevEco Studio for Harmony OS;

----------------------

注意其中的两个${USER}位置请务必替换成你在系统的用户名

//////////////////////////////////////////

在~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio64.exe.vmoptions

文件最后添加三行:

-Dsun.jnu.encoding=UTF-8

-Dos.version=10.0

-Dos.name=Windows 10

----------------------

 

保存后回到桌面双击deveco studio快捷图标启动deveco studio 2 beta 3。

////////////////////////////

创建一个鸿蒙App(Java),然后修改gradle-wrapper.properties:

distributionBase=GRADLE_USER_HOME

distributionPath=wrapper/dists

distributionUrl=https\://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.3-all.zip

zipStoreBase=GRADLE_USER_HOME

zipStorePath=wrapper/dists

 

 

///////////////////

 

如果发现你的[File/invalidate cache/restart]的重启命令没法让ide自我重启的话,请按我的以下方法解决:

第一步,装好Golang编译环境。

下载 https://golang.org/dl/go1.15.7.linux-amd64.tar.gz

解压安装:

 

sudo tar -C /usr/local -xzf go1.15.7.linux-amd64.tar.gz

将 /usr/local/go/bin 目录添加至PATH环境变量,譬如写在~/.bashrc最后:

 

export PATH=$PATH:/usr/local/go/bin

 

第二步,重命名原来的restarter.exe为restarter32.exe,记得并不是删除,mv restarter.exe restarter32.exe

第三步,在~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin目录下创建 restarter.go:

----------------------

 

package main import ( "fmt" "log" "os" "os/exec" "path/filepath" ) func main() { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatalln(err) } err = os.Chdir(dir) if err != nil { log.Fatalln(err) } CallExc("taskkill", []string{"/f", "/im", "Previewer.exe"}) CallExc("taskkill", []string{"/f", "/im", "Simulator.exe"}) CallExc("taskkill", []string{"/f", "/im", "node.exe"}) CallExc("taskkill", []string{"/f", "/im", "java.exe"}) CallExc("restarter32", os.Args[1:]) } func CallExc(proc string, args []string) { cmd := exec.Command(proc, args...) b, err := cmd.CombinedOutput() if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(b)) return }

----------------------

执行交叉编译命令:

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o restarter.exe restarter.go

---------------------------------------------------------------------------------------------

则会在同级目录生成64位的Windows程序restarter.exe

这样就修复了ide在Linux上无法重启的bug。

---------------------------------------------------------------------------------------------

下面我们更进一步

写一个引导程序【devecostudio.exe】来监控ide主程序【devecostudio64.exe】,

但有退出,则自动关闭尚未自行退出的相关进程

在~/.wine/drive_c/Program/Huawei/DevEcoStudio/bin目录下创建 devecostudio.go :

package main import ( "fmt" "log" "os" "os/exec" "path/filepath" "strconv" "strings" "time" ) func main() { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatalln(err) } err = os.Chdir(dir) if err != nil { log.Fatalln(err) } if isProcessExistNix("systemd") { CallExc("killall", []string{"-9", "wineserver"}) } else { kills() CallExc("devecostudio64", os.Args[1:]) for { time.Sleep(time.Minute) if b, _, _ := isProcessExistWin("devecostudio64.exe"); !b { kills() os.Exit(0) } } } } func kills() { CallExc("taskkill", []string{"/f", "/im", "Previewer.exe"}) CallExc("taskkill", []string{"/f", "/im", "Simulator.exe"}) CallExc("taskkill", []string{"/f", "/im", "node.exe"}) CallExc("taskkill", []string{"/f", "/im", "java.exe"}) if b, _, _ := isProcessExistWin("winedevice.exe"); b { CallExc("taskkill", []string{"/f", "/im", "*.exe"}) } } func isProcessExistNix(appName string) bool { cmd := exec.Command("ps", "-C", appName) output, _ := cmd.CombinedOutput() fields := strings.Fields(string(output)) for _, v := range fields { if v == appName { return true } } return false } func isProcessExistWin(appName string) (bool, string, int) { appary := make(map[string]int) cmd := exec.Command("cmd", "/C", "tasklist") output, err := cmd.CombinedOutput() if err != nil { log.Fatal(err) } fmt.Printf("fields: %v\n", output) n := strings.Index(string(output), "System") if n == -1 { log.Println(fmt.Errorf("%s file not found in proc", appName)) return false, appName, -1 } data := string(output)[n:] fields := strings.Fields(data) for k, v := range fields { if v == appName { appary[appName], _ = strconv.Atoi(fields[k+1]) return true, appName, appary[appName] } } return false, appName, -1 } func CallExc(proc string, args []string) { cmd := exec.Command(proc, args...) b, err := cmd.CombinedOutput() if err != nil { fmt.Println("Error:", err) return } fmt.Println(string(b)) return }

----------------------------------------

 

 

执行交叉编译命令:

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o devecostudio.exe devecostudio.go

---------------------------------------------------------------------------------------------

修改devecostudio.sh

---------------------

#!/bin/bash

wine=wine

prefix_dir=${HOME}/.wine

WINEPREFIX=${prefix_dir} ${wine} ${HOME}/.wine/drive_c/Program/Huawei/DevEcoStudio/bin/devecostudio.exe

exit 0

---------------------------------------------------------------------------------------------

以后如果主程序退出后还有残余进程没退出,devecostudio.exe就会自动关闭并自行退出。

搞定~

---------------------------------------------------------------------------------------------

 

---------------------------------------------------------------------------------------------

 

原标题:有Wine高手可以成功运行鸿蒙OS的Win版ide吗?

如题,我想在UOS/Deepin上做鸿蒙OS开发,通过系统附带的deepin-wine我成功启动并安装了deveco studio,

但是启动时犯难了,报了一个error 2什么的错误。

启动配置:

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有